From 0d086f32df5c583f09d2f421aa733c2c97673342 Mon Sep 17 00:00:00 2001 From: kaligula Date: Tue, 9 Apr 2013 20:16:08 +0200 Subject: [PATCH] Support for linking directly to sections in ApiFeedWatchlist. It works only if a section name is present in item's comment. Change-Id: I2547c10b01fab2f835fce856f6213386f309f0af --- includes/api/ApiFeedWatchlist.php | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/includes/api/ApiFeedWatchlist.php b/includes/api/ApiFeedWatchlist.php index fdbdcc33de..b96ea37142 100644 --- a/includes/api/ApiFeedWatchlist.php +++ b/includes/api/ApiFeedWatchlist.php @@ -33,8 +33,9 @@ */ class ApiFeedWatchlist extends ApiBase { - private $linkToDiffs = false; private $watchlistModule = null; + private $linkToDiffs = false; + private $linkToSections = false; /** * This module uses a custom feed wrapper printer. @@ -97,6 +98,12 @@ class ApiFeedWatchlist extends ApiBase { $fauxReqArr['wlprop'] .= '|ids'; } + // Support linking directly to sections when possible + // (possible only if section name is present in comment) + if ( $params['linktosections'] ) { + $this->linkToSections = true; + } + // Check for 'allrev' parameter, and if found, show all revisions to each page on wl. if ( $params['allrev'] ) { $fauxReqArr['wlallrev'] = ''; @@ -164,6 +171,18 @@ class ApiFeedWatchlist extends ApiBase { $titleUrl = $title->getFullURL(); } $comment = isset( $info['comment'] ) ? $info['comment'] : null; + + // Create an anchor to section. + // The anchor won't work for sections that have dupes on page + // as there's no way to strip that info from ApiWatchlist (apparently?). + // RegExp in the line below is equal to Linker::formatAutocomments(). + if ( $this->linkToSections && $comment !== null && preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches ) ) { + global $wgParser; + $sectionTitle = $wgParser->stripSectionName( $matches[2] ); + $sectionTitle = Sanitizer::normalizeSectionNameWhitespace( $sectionTitle ); + $titleUrl .= Title::newFromText( '#' . $sectionTitle )->getFragmentForURL(); + } + $timestamp = $info['timestamp']; $user = $info['user']; @@ -195,6 +214,7 @@ class ApiFeedWatchlist extends ApiBase { ApiBase::PARAM_MAX => 72, ), 'linktodiffs' => false, + 'linktosections' => false, ); if ( $flags ) { $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags ); @@ -219,6 +239,7 @@ class ApiFeedWatchlist extends ApiBase { 'feedformat' => 'The format of the feed', 'hours' => 'List pages modified within this many hours from now', 'linktodiffs' => 'Link to change differences instead of article pages', + 'linktosections' => 'Link directly to changed sections if possible', 'allrev' => $wldescr['allrev'], 'wlowner' => $wldescr['owner'], 'wltoken' => $wldescr['token'], -- 2.20.1